var express = require('express');
var fs = require('fs');
var path = require('path');
var jwt = require('jsonwebtoken')
var customId = require("custom-id");
// 创建子路由对象(用来管理一部分后端路由)
var useRouter = express.Router()
// 分页 模糊查询
useRouter.post('/auth/search', (req, res) => {
    var { searchKey, page, count } = req.body;

    // 读取users.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/users.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : []

    var newarr = arr.filter((item) => {
        // return item.phone.includes(searchKey) || item.name.includes(searchKey);
        return new RegExp(searchKey).test(item.name) || new RegExp(searchKey).test(item.phone)
    })
    console.log(newarr)

    // 分页
    var newarr1 = newarr.slice((page - 1) * count, page * count);
    // 返回数据
    res.send({ code: 200, msg: '查询成功', total: newarr1.length, list: newarr1 })

});
// 登录
useRouter.post('/user/login', (req, res) => {
    var { phone, pass } = req.body;

    // 读取users.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/users.json');
    var content = fs.readFileSync(filepath);
    content = content.toString() ? JSON.parse(content) : []

    var i = content.findIndex((item, index) => {
        return item.phone == phone && item.pass == pass;
    })
    if (i != - 1) {
        // 返回数据
        // 登陆成功 生成token字符串(身份令牌)
        // 借助第三方包 jsonwebtoken 生成token字符串
        // jwt.sign(加密的数据, 密钥，{ 算法 ，过期时间})
        var token = jwt.sign({ phone: phone }, '1234', { algorithm: 'HS256', expiresIn: "6h" })
        res.send({ code: 200, msg: '登陆成功', userinfo: content[i], token })
    } else {
        res.send({ code: 400, msg: '登录失败' })

    }
});
//角色列表
useRouter.get('/role/list', (req, res) => {
    // 读取roles.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/roles.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : []
    res.send({ code: 200, msg: "查询成功", list: arr });
})
// 注册
useRouter.post('/user/register', (req, res) => {
    // 获取注册相关的参数
    var { phone, name, email } = req.body;
    // 读取users.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/users.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : []
    var i = arr.findIndex((item, index) => {
        return item.phone == phone;
    })
    // 读取roles.json文件中的用户数据
    var filepath1 = path.join(__dirname, '../json/roles.json');
    var arr1 = fs.readFileSync(filepath1);
    arr1 = arr1.toString() ? JSON.parse(arr1) : []
    var it = arr1.find((item, index) => {
        return item._id == req.body.role;
    })
    var id = customId({});

    if (i != - 1) {//用户已存在注册失败
        // 返回数据
        res.send({ code: 400, msg: '该手机号已注册,注册失败' })
    } else {
        arr.push({ ...req.body, role: it, key: id, pass: 'xx1234' });
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf8')
        res.send({ code: 200, msg: '注册成功' })
    }
});
// 删除
useRouter.post('/user/delete', (req, res) => {
    // 获取注册相关的参数
    var { key, page, count } = req.body;
    // 读取users.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/users.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : []

    var i = arr.findIndex((item, index) => {
        return item.key == key;
    })
    if (i != - 1) {
        arr.splice(i, 1);
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf8')
        // 这样会写死 只会返回第一页的数据  因为没有传page和count
        // 分页
        // var newarr = arr.slice((page - 1) * count, page * count);
        res.send({ code: 200, msg: '删除成功', list: arr })
    } else {
        res.send({ code: 400, msg: '删除失败!' })
    }
});
//编辑
useRouter.post('/user/edit', (req, res) => {
    // 获取注册相关的参数
    // user 账号  name 姓名 , phone 手机号 , role 角色id 参数都是必须的
    var { key, user, email, name, phone } = req.body;
    // 读取users.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/users.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : []
    console.log(req.body)
    var i = arr.findIndex((item, index) => {
        return item.key == key;
    })
    var phonenumber = arr.findIndex((item, index) => {
        return item.phone == phone;
    })
    // 用户权限
    var filepath1 = path.join(__dirname, '../json/roles.json');
    var arr1 = fs.readFileSync(filepath1);
    arr1 = arr1.toString() ? JSON.parse(arr1) : []
    var it = arr1.find((item, index) => {
        return item._id == req.body.role;
    });
    console.log(phonenumber);
    console.log(it);
    // console.log(i);
    // console.log(arr[i])
    if (i != - 1 && phonenumber == -1) {
        arr.splice(i, 1, { ...req.body, role: it, pass: 'xx1234' });
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf8')
        // 这样会写死 只会返回第一页的数据  因为没有传page和count
        // 分页
        // var newarr = arr.slice((page - 1) * count, page * count);
        res.send({ code: 200, msg: '编辑成功', list: arr })
    } else {
        res.send({ code: 400, msg: '编辑失败!' })
    }
});
// 添加角色
useRouter.post('/role/add', (req, res) => {
    var { name, desc } = req.body;
    // 读取roles.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/roles.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : []

    var index = arr.findIndex((item, index) => {
        return item.name == name;
    })
    var id = customId({});
    if (index == -1) {
        arr.push({ ...req.body, _id: id });
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf-8');
        res.send({ code: 200, msg: "添加角色成功", list: arr });
    } else {
        res.send({ code: 400, msg: "添加角色失败" });
    }
})
// 删除角色权限
useRouter.post('/role/del', (req, res) => {
    var { _id } = req.body;
    // 读取roles.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/roles.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : []

    var index = arr.findIndex((item, index) => {
        return item._id == _id;
    })
    if (index != -1) {
        arr.splice(index, 1);
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf-8');
        res.send({ code: 200, msg: "删除角色成功", list: arr });
    } else {
        res.send({ code: 400, msg: "删除角色失败" });
    }
})
// 添加权限
useRouter.post('/role/addauth', (req, res) => {
    var { _id, permissions } = req.body;
    // 读取roles.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/roles.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : []

    var index = arr.findIndex((item, index) => {
        return item._id == _id;
    })
    console.log(index);
    console.log(permissions);
    if (index != -1) {
        var arr1 = arr[index].permissions.concat(permissions);
        var brr = Array.from(new Set(arr1));
        // console.log(brr);
        arr[index].permissions.splice(index, arr[index].permissions.length, ...brr)
        // console.log(arr);
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf-8');
        res.send({ code: 200, msg: '添加权限成功' })
        // arr.splice(index, 1);
        // fs.writeFileSync(filepath, JSON.stringify(arr), 'utf-8');
        // res.send({ code: 200, msg: "删除角色成功", list: arr });
    } else {
        res.send({ code: 400, msg: "添加权限失败" });
    }
})
// 接收前端传过来的请求图片
useRouter.post('/user/avatar', (req, res) => {
    console.log(req.file);
    // var avatarUrl = req.file.path.toString('base64');
    var filepath1 = path.join(__dirname, `../static/uploads/${req.file.filename}`);
    console.log(filepath1);
    var base64 = fs.readFileSync(filepath1, 'base64');

    var { id } = req.body
    // 读取users.json文件中的用户数据
    var filepath = path.join(__dirname, '../json/users.json')
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : [];


    // 判断用户是否已经存在
    var i = arr.findIndex((item) => {
        return item.key == id
    })
    if (i != -1) {
        arr[i].avatar = base64;
        fs.writeFileSync(filepath, JSON.stringify(arr), 'utf-8');
        console.log(arr[i])
        res.send({ code: 200, msg: '头像上传成功', userinfo: arr[i] });
    } else {
        res.send({ code: 400, msg: '头像上传失败' });
    }

})
// 更新用户信息
useRouter.post('/user/personal', (req, res) => {
    var { phone, key } = req.body;

    var filepath = path.join(__dirname, '../json/users.json');
    var arr = fs.readFileSync(filepath);
    arr = arr.toString() ? JSON.parse(arr) : [];

    var i = arr.findIndex((item) => {
        return item.key == key
    });
    var iphone = arr.findIndex((item) => {
        return item.phone == phone
    });
    if (i != -1) {
        if (iphone == -1) {
            console.log(req.body)
            arr[i].phone = req.body.phone;
            arr[i].name = req.body.name;
            arr[i].email = req.body.email;
            arr[i].address = req.body.address;
            arr[i].signature = req.body.signature;
            arr[i].time = req.body.time;
            console.log(arr[i]);
            // ...req.body 
            // var brr = arr[i](...req.body);
            // Array.from(new Set(brr));
            fs.writeFileSync(filepath, JSON.stringify(arr), "utf-8");
            res.send({ code: 200, msg: "更新用户信息成功", userinfo: arr[i] });
        } else {
            res.send({ code: 400, msg: "该手机号已被注册,更新用户失败" })
        }

    } else {
        res.send({ code: 400, msg: "该手机号已被注册,更新用户失败" })
    }
})



module.exports = useRouter;